
// 0.请求工具类
import axios from 'axios'
import store from '@/store'
import router from '../router'
import to from 'await-to-js'

// 1.创建的axios实例
const instance = axios.create({
  baseURL: 'http://geek.itheima.net/',
  timeout: 5000
})

// 3.请求头带token
instance.interceptors.request.use(config => {
  // 对config进行修改
  const token = store.state.user.token
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config
}, err => Promise.reject(err))

// 4.token 失效处理
instance.interceptors.request.use(res => res, err => {
  // 1.判断状态码 401
  // 2.删除token
  // 3.调整登录
  if (err.response && err.response.status === 401) {
    // token失效
    store.commit('user/setToken', '')
    //  组件：this.$route.path 路径  fullPath 完整路径，带参数的
    //  通过 router实例 获取当前路由信息对象 currentRoute
    //  回跳地址：/order?id=100&name=tom  ===> 跳转登录地址  /login?returnUrl=/order?id=100&name=tom
    //  地址可能回出现特殊字符 & 需要转换成url编码 encodeURIComponent
    //  /login?returnUrl=%2Forder%3Fid%3D100%26name%3Dtom
    router.push('/login?returnUrl=' + encodeURIComponent(router.currentRoute.fullPath))
  }
  return Promise.reject(err)
})

// 2.导出一个通过新的axios实例调用接口的函数
export default ({ url, method = 'get', params, data, headers }) => {
  const promise = instance({ url, method, params, data, headers })
  return to(promise)
}
